var http = require('http');
var fs = require('fs');
var cheerio = require('cheerio');
var request = require('request');

var i = 0;
var url = "http://www.news1.ldu.edu.cn/info/1131/31306.htm";    //初始 url
var tempUrl = url;

function fetchPage(x) {     //封装了一层函数
    startRequest(x);
}

function startRequest(x) {
    //采用 http 模块向服务器发起一次 get 请求
    http.get(x, function(res) {
        var html = '';      //用来存储请求网页的整个 html 内容
        var titles = [];

        res.setEncoding('UTF-8');   //防止中文乱码
        //监听 data 事件，每次取一块数据
        res.on('data', function(chunk) {
            html += chunk;
        });

        //监听 end 事件，如果整个网页内容的 html 都获取完毕，就执行回调函数
        res.on('end', function(){
            var $ = cheerio.load(html); //采用 cheerio 模块解析 html
            var time =$('span.timestyle51906').text().trim();

            var news_item = {
                //获取文章的标题
                title: $('td.titlestyle51906').text().trim(),
                //获取文章发布的时间
                Time: time,
                //获取当前文章的 url
                link: tempUrl,
                // i 是用来判断获取了多少篇文章
                i: i = i + 1,
            };
            console.log(news_item);     //打印新闻消息
            var news_title = $('td.titlestyle51906').text().trim();

            savedContent($, news_title);    //存储每篇文章的内容及文章标题
            savedImg($, news_title);        //存储每篇文章的图片及图片标题

            //获取下一篇文章的 url
            var nextLink = "http://www.news1.ldu.edu.cn/info/1131/" + $("table.winstyle51906 tr:last-child td table tbody tr:last-child td.contextstyle51906 a").attr('href');
            str = encodeURI(nextLink);
            tempUrl = nextLink;

            //这是亮点之一，通过控制 i ,可以控制爬取多少篇文章
            if(i <= 100) {
                fetchPage(str);
            } else {
                console.log("作者：张海陆\t班级：软工本1501\t学号：20152203301");
                console.log("Call me by 15563836030");
                console.log("Contact me by 15563836030@163.com");
                
            }
        });
    }).on('error', function(err){
        console.log(err);
    });
}

//该函数的作用：在本地存储所爬取的新闻内容资源
function savedContent($, news_title) {
    $('.c51906_content div p').each(function (index, item){
        var x = $(this).text();
        x = x + '\n';
        //将新闻文本内容一段一段添加到 /data 文件夹下，并用新闻的标题来命名文件
        fs.appendFile('./data/' + news_title + '.txt', x, 'UTF-8', function(err) {
            if(err) {
                console.log(err);
            }
        });
    })
}

//该函数的作用，在本地存储所爬取到的图片资源
function savedImg($, news_title) {
    $('div.c51906_content img').each(function(index, item){
        var img_title = $(this).parent().next().text().trim();      //获取图片的标题

        if(img_title.length > 50 || img_title == ''){
            img_title = "Null";
        }

        var img_filename = img_title + '.jpg';
        var img_src = 'http://www.news1.ldu.edu.cn' + $(this).attr('src');     //获取图片的 url

        //采用 request 模块，向服务器发起一次请求，获取图片资源
        request.head(img_src, function(err, res, body){
            if(err) {
                console.log(err);
            }
        });
        request(img_src).pipe(fs.createWriteStream('./image/' + news_title + '---' + img_filename));    //通过流的方式，把图片写到本地 /image 目录下，并用新闻的标题作为图片的名称。
    })
}

fetchPage(url);     //主程序开始运行

function start() {
    fetchPage(url);
}